home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1999 / MacHack 1999.toast / The Hacks / Sound-IN-Sane / SIS_UI.c < prev    next >
Text File  |  1999-06-26  |  5KB  |  302 lines

  1. /*=============================*\
  2.           Sound-IN-Sane
  3.     A MacHack 1999 Production
  4.  
  5.     Developed and Written by
  6.  
  7.           Shawn Platkus
  8.  
  9.           June 25, 1999
  10. \*=============================*/
  11.  
  12. // Filename:    SIS_UI.c
  13.  
  14. // This file handles the Event Loop and user interface stuff.
  15.  
  16. #include "Sound-IN-Sane.h"
  17. #include "SIS_UI.h"
  18.  
  19. //    Globals
  20. Boolean            gDone;
  21. Boolean            gbInsanityOn = false;
  22. long            gCycleTime = 60;
  23.  
  24.  
  25. //***
  26. //        ToolboxInit
  27. //***
  28.  
  29. void ToolboxInit (void)
  30. {
  31.     InitGraf(&qd.thePort);
  32.     InitFonts();
  33.     InitWindows();
  34.     InitMenus();
  35.     TEInit();
  36.     InitDialogs(NULL);
  37.     InitCursor();
  38. }
  39.  
  40.  
  41. //***
  42. //        MenuBarInit
  43. //***
  44.  
  45. void MenuBarInit (void)
  46. {
  47.     Handle            menuBar;
  48.     MenuHandle        menu;
  49.     
  50.     menuBar = GetNewMBar(kMBARid);
  51.     SetMenuBar(menuBar);
  52.  
  53.     menu = GetMenuHandle(mApple);
  54.     AppendResMenu(menu, 'DRVR');
  55.     
  56.     DrawMenuBar();
  57. }
  58.  
  59.  
  60. //***
  61. //        EventLoop
  62. //***
  63.  
  64. void EventLoop (void)
  65. {        
  66.     EventRecord        event;
  67.     long             startTicks = TickCount();
  68.     long            ticks = startTicks;
  69.  
  70.     gDone = ApplicationInit();
  71.     while (gDone == false)
  72.     {
  73.         if (WaitNextEvent(everyEvent, &event, kSleep, NULL))
  74.             DoEvent(&event);
  75.  
  76.         if (gbInsanityOn)
  77.         {
  78.             while ((TickCount() - ticks) > gCycleTime)
  79.             {
  80.                 ticks = TickCount();
  81.                 CycleSoundSources();
  82.             }
  83.         }
  84.         
  85.     }
  86.     
  87.     ApplicationCleanUp();
  88. }
  89.  
  90.  
  91. //***
  92. //        DoEvent
  93. //***
  94.  
  95. void DoEvent (EventRecord *eventPtr)
  96. {
  97.     char    theChar;
  98.     
  99.     switch (eventPtr->what)
  100.     {
  101.         case mouseDown: 
  102.             HandleMouseDown(eventPtr);
  103.             break;
  104.         case keyDown:
  105.         case autoKey:
  106.             theChar = eventPtr->message & charCodeMask;
  107.             if ((eventPtr->modifiers & cmdKey) != 0) 
  108.                 HandleMenuChoice(MenuKey(theChar));
  109.             break;
  110.     }
  111. }
  112.  
  113.  
  114. //***
  115. //        HandleMouseDown
  116. //***
  117.  
  118. void HandleMouseDown (EventRecord *eventPtr)
  119. {
  120.     WindowPtr        window;
  121.     short            thePart;
  122.     long            menuChoice;
  123.     
  124.     thePart = FindWindow(eventPtr->where, &window);
  125.     
  126.     switch (thePart)
  127.     {
  128.         case inMenuBar:
  129.             menuChoice = MenuSelect(eventPtr->where);
  130.             HandleMenuChoice(menuChoice);
  131.             break;
  132.         case inSysWindow : 
  133.             SystemClick(eventPtr, window);
  134.             break;
  135.     }
  136. }
  137.  
  138.  
  139. //***
  140. //        HandleMenuChoice
  141. //***
  142.  
  143. void HandleMenuChoice (long menuChoice)
  144. {
  145.     short    menu;
  146.     short    item;
  147.     
  148.     if (menuChoice != 0)
  149.     {
  150.         menu = HiWord(menuChoice);
  151.         item = LoWord(menuChoice);
  152.         
  153.         switch (menu)
  154.         {
  155.             case mApple:
  156.                 HandleAppleChoice(item);
  157.                 break;
  158.             case mFile:
  159.                 HandleFileChoice(item);
  160.                 break;
  161.         }
  162.         HiliteMenu(0);
  163.     }
  164. }
  165.  
  166.  
  167. //***
  168. //        HandleAppleChoice
  169. //***
  170.  
  171. void HandleAppleChoice (short item)
  172. {
  173.     MenuHandle    appleMenu;
  174.     Str255        accName;
  175.     short        accNumber;
  176.     
  177.     switch (item)
  178.     {
  179.         case iAbout:
  180.             SysBeep(20);
  181.             break;
  182.         default:
  183.             appleMenu = GetMenuHandle(mApple);
  184.             GetMenuItemText(appleMenu, item, accName);
  185.             accNumber = OpenDeskAcc(accName);
  186.             break;
  187.     }
  188. }
  189.  
  190.  
  191. //***
  192. //        HandleFileChoice
  193. //***
  194.  
  195. void HandleFileChoice (short item)
  196. {
  197.     switch (item)
  198.     {
  199.         case iDialog:
  200.             DoDialog();
  201.             break;
  202.         case iQuit:
  203.             gDone = true;
  204.             break;
  205.     }
  206. }
  207.  
  208.  
  209. //***
  210. //        DoDialog
  211. //***
  212.  
  213. void DoDialog(void)
  214. {
  215.     ModalFilterUPP    ModalFilter;
  216.     DialogPtr        dialog;
  217.     Boolean            dialogDone = false;
  218.     short            itemHit, iType;
  219.     Handle            iHandle;
  220.     Rect            iRect;
  221.     Str255            cycleTimeStr;
  222.     long            number;
  223.     int                checkbox;
  224.     
  225.     dialog = GetNewDialog(kDialogResID, NULL, kMoveToFront);
  226.  
  227.     SetupDialog(dialog);
  228.  
  229.     ShowWindow(dialog);
  230.     SetPort(dialog);
  231.     
  232.     /*    These three routines are documented in 
  233.         Tech Note 304 (TB 37 in the new numbers). 
  234.     */
  235.     SetDialogDefaultItem(dialog, kStdOkItemIndex);
  236.     SetDialogTracksCursor(dialog, kEditItemExists);
  237.     
  238.     while (! dialogDone)
  239.     {
  240.         ModalDialog(NULL, &itemHit);
  241.         
  242.         switch(itemHit)    
  243.         {
  244.             case ok:
  245.                 GetDialogItem(dialog, kItem_CycleTime, &iType, &iHandle, &iRect);
  246.                 GetDialogItemText(iHandle, cycleTimeStr);
  247.                 StringToNum( cycleTimeStr, &gCycleTime );
  248.                 //ProcessConfiguration(dialog);
  249.                 gbInsanityOn = true;
  250.                 dialogDone = true;
  251.                 break;
  252.  
  253.             default:
  254.                 if ((itemHit >= kItem_FirstCheckbox) && (itemHit <= kItem_LastCheckbox))
  255.                 {
  256.                     GetDialogItem(dialog, itemHit, &iType, &iHandle, &iRect);
  257.                     checkbox = GetControlValue((ControlHandle)iHandle);
  258.                     checkbox = 1 - checkbox;
  259.                     SetControlValue((ControlHandle)iHandle, checkbox);
  260.                 }
  261.         }
  262.     }
  263.         
  264.     DisposeDialog(dialog);
  265.     DisposeRoutineDescriptor(ModalFilter);
  266.     
  267. }
  268.  
  269.  
  270. //***
  271. //        SetupDialog
  272. //***
  273.  
  274. void SetupDialog(DialogPtr theDialog)
  275. {
  276.     ModalFilterUPP    ModalFilter;
  277.     DialogPtr        dialog;
  278.     Boolean            dialogDone = false;
  279.     short            itemHit, iType;
  280.     Handle            iHandle;
  281.     Rect            iRect;
  282.     Str255            cycleTimeStr;
  283.     long            number;
  284.     int                checkbox;
  285.  
  286.     GetDialogItem(dialog, kItem_CycleTime, &iType, &iHandle, &iRect);
  287.     NumToString(gCycleTime, cycleTimeStr);
  288.     SetDialogItemText(iHandle, cycleTimeStr);
  289.  
  290.     return;
  291. }
  292.  
  293.  
  294. //***
  295. //        HandleCheckbox
  296. //***
  297.  
  298. void HandleCheckbox(DialogPtr theDialog, short itemHit)
  299. {
  300.     int        checkbox;
  301.     
  302. }